home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / source / tsm23s.lha / TSMorph-prefs.c < prev    next >
C/C++ Source or Header  |  1993-10-08  |  38KB  |  1,478 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. //    $Author: M_J_Paddock $
  21. //    $Date: 1993/09/11 21:57:56 $
  22. //    $Revision: 1.2 $
  23.  
  24. // This code was written a bit quick and includes a
  25. // lot of hard coded stuff which should be #defined
  26.  
  27. // Include headers
  28. #include <proto/exec.h>
  29. #include <proto/gadtools.h>
  30. #include <proto/intuition.h>
  31. #include <proto/diskfont.h>
  32. #include <proto/graphics.h>
  33. #include <proto/utility.h>
  34. #include <proto/asl.h>
  35. #include <proto/icon.h>
  36. #include <proto/dos.h>
  37. #include <libraries/amigaguide.h>
  38. #include <clib/amigaguide_protos.h>
  39. #include <pragmas/amigaguide_pragmas.h>
  40.  
  41. #include <stdio.h>
  42. #include <string.h>
  43. #include <stdlib.h>
  44.  
  45. #include <intuition/gadgetclass.h>
  46.  
  47. // following not in 2.02 headers
  48. #if INCLUDE_VERSION < 37
  49. LONG Stricmp(UBYTE *string1,UBYTE *string2);
  50. #pragma libcall UtilityBase Stricmp A2 9802
  51. #endif
  52.  
  53. #include "Prefs.h"
  54.  
  55. struct Library *GadToolsBase;
  56. struct Library *UtilityBase;
  57. struct Library *AslBase;
  58. struct Library *AmigaGuideBase;
  59.  
  60. struct FileRequester     *filereq        = NULL;
  61. char TempFilename[257];
  62. AMIGAGUIDECONTEXT         handle         = NULL;
  63. struct NewAmigaGuide        nag     = {NULL};
  64. ULONG                            ASig            = 0;
  65.  
  66. /* Version string for CLI version */
  67. char *Version = "$VER: TSMorph-prefs 2.3 (6.10.93)";
  68.  
  69. // Help nodes
  70. unsigned char *context[] = {
  71.     "",                    //    0
  72.     "Main",                // 1
  73.     "P-KEEPSETTINGS",    // 2
  74.     "P-CHANGEPALETTE",//    3
  75.     "P-CREATEICONS",    // 4
  76.     "P-CREATEICONSP",    // 5
  77.     "P-OPENMODE",        // 6
  78.     "P-PUBSCREEN",        // 7
  79.     "P-ZOOM",            // 8
  80.     "P-CREATEICONSR",    // 9
  81.     "P-DEPTH",            // 10
  82.     "P-DX",                // 11
  83.     "P-DY",                // 12
  84.     "P-LOADSCRIPT",    // 13
  85.     "P-MODE",            // 14
  86.     "P-POSTSCRIPT",    // 15
  87.     "P-PRESCRIPT",        // 16
  88.     "P-PUBSCREENR",    // 17
  89.     "P-QUALITY",        // 18
  90.     "P-SAVEFORMAT",    // 19
  91.     "P-ANTIALIAS",        // 20
  92.     "P-HELP",            // 21
  93.     "P-PREVIEW",        // 22
  94.     "P-CUSTOMMODE",    // 23
  95.     "P-CUSTOMDEPTH",    // 24
  96.     "TSMP-Close",        // 25
  97.     "TSMP-Depth",        // 26
  98.     "TSMP-Zoom",        // 27
  99.     "TSMorph-prefs",    // 28
  100.     "TSMP-Save",        // 29
  101.     "TSMP-Use",            // 30
  102.     "TSMP-Cancel",        // 31
  103.     "TSMP-men-Project",// 32
  104.     "TSMP-men-P-Open",// 33
  105.     "TSMP-men-P-SaveAs",// 34
  106.     "TSMP-men-P-Quit",// 35
  107.     "TSMP-men-Edit",    // 36
  108.     "TSMP-men-E-ResetD",//37
  109.     "TSMP-men-E-LastS",//38
  110.     "TSMP-men-E-Restore",//39
  111.     "TSMP-men-Settings",//40
  112.     "TSMP-men-S-Icons",//41
  113.     "TSMP-men",            //42
  114. };
  115.  
  116. // Settings
  117. STRPTR CustomScreen[100] = {"NONE",NULL};    // table of modes - headed by none
  118. ULONG CustomMode = 0;
  119. ULONG CustomDepth = 4;
  120. ULONG DX = 0;
  121. ULONG DY = 0;
  122. ULONG RenderMode = 0;
  123. ULONG SaveFormat = 0;
  124. ULONG Quality = 75;
  125. BOOL AntiAlias = FALSE;
  126. ULONG Depth = 2;
  127. ULONG Zoom = 1;
  128. ULONG Palette = 0;
  129. ULONG OpenMode = 2;
  130. BOOL KeepPrefs = TRUE;
  131. BOOL Help = FALSE;
  132. BOOL ProjectI = TRUE;
  133. BOOL PrefsI = TRUE;
  134. BOOL RenderI = FALSE;
  135.  
  136. // Icons from this program
  137. BOOL Icons = TRUE;
  138.  
  139. // Prototypes
  140. void UpdateGadgets(void);
  141. void DisableWindow(void);
  142. void EnableWindow(void);
  143. void Error(char *ErrorMessage,char *extra);
  144. void SaveSettings(char *filename);
  145. void LoadSettings(char *filename);
  146. BOOL GetAFile(char *name,char *Prompt,ULONG flags);
  147. void InitParams(UBYTE *string);
  148. void help(ULONG helpnum);
  149.  
  150. // Is point in a rectangle
  151. #define PointInBox(x,y,mx,my,MX,MY) ((x>=mx)&&(y>=my)&&(x<=MX)&&(y<=MY))
  152.  
  153. struct List NodeList;            // Custom mode table
  154.  
  155. struct Node FirstNode = {0};
  156.  
  157. void
  158. main(void) {
  159.     int running = 1;
  160.     struct NameInfo buff;
  161.     ULONG id = INVALID_ID;
  162.     int kount = 1;
  163.     struct Node *MyNode;
  164.     struct AmigaGuideMsg *agm;
  165.     ULONG Signals;
  166.  
  167.     // Initialise Custom list and add "NONE"
  168.     NewList(&NodeList);
  169.     FirstNode.ln_Name = CustomScreen[0];
  170.     AddTail(&NodeList,&FirstNode);
  171.     // try and open amigaguide
  172.     if (AmigaGuideBase = OpenLibrary ("amigaguide.library", 34L)) {
  173.         nag.nag_BaseName        = "TSMorph";
  174.         nag.nag_Name            = "TSMorph.guide";
  175.         nag.nag_ClientPort    = "TSMorph-prefs_HELP";
  176.         nag.nag_Context        = context;
  177.         nag.nag_Flags            = HTF_NOACTIVATE;
  178.         nag.nag_PubScreen        = NULL;
  179.         if (handle = OpenAmigaGuideAsync(&nag, NULL)) {
  180.             ASig = AmigaGuideSignal(handle);
  181.         }
  182.     }
  183.     // Open various libraries
  184.     if (IntuitionBase = OpenLibrary("intuition.library",37)) {
  185.         if (GadToolsBase = OpenLibrary("gadtools.library",37)) {
  186.             if (DiskfontBase = OpenLibrary("diskfont.library",36)) {
  187.                 if (GfxBase = OpenLibrary("graphics.library",37)) {
  188.                     // build up list of display modes (max ~100)
  189.                     id = NextDisplayInfo(id);
  190.                     while ((id != INVALID_ID) && (kount < 98)) {
  191.                         if (GetDisplayInfoData(NULL,(UBYTE *)&buff,sizeof(struct NameInfo),DTAG_NAME,id)) {
  192.                             if ((MyNode = (struct Node *)calloc(1,sizeof(struct Node))) &&
  193.                                  (CustomScreen[kount] = (STRPTR)strdup(buff.Name))) {
  194.                                 MyNode->ln_Name = CustomScreen[kount];
  195.                                 AddTail(&NodeList,MyNode);
  196.                                 kount++;
  197.                             }
  198.                         }
  199.                         id = NextDisplayInfo(id);
  200.                     }
  201.                     CustomScreen[kount] = NULL;
  202.                     // open other libraries
  203.                     if (UtilityBase = OpenLibrary("utility.library",37)) {
  204.                         if (AslBase = OpenLibrary("asl.library",37)) {
  205.                             if (IconBase = OpenLibrary("icon.library",37)) {
  206.                                 // get File requester and open window
  207.                                 if (filereq = (struct FileRequest *)AllocFileRequest()) {
  208.                                     if (!SetupScreen()) {
  209.                                         if (!OpenTSMorphPrefsWindow()) {
  210.                                             // Set up custom modes
  211.                                             GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomMode],TSMorphPrefsWnd,NULL,
  212.                                                 GTLV_Labels,&NodeList,
  213.                                                 TAG_END);
  214.                                             // Load settings from ENV:
  215.                                             LoadSettings("ENV:TSMorph/TSMorph.prefs");
  216.                                             // Loop until quit
  217.                                             while (running) {
  218.                                                 Signals = Wait((ASig) |
  219.                                                                     (1L << TSMorphPrefsWnd->UserPort->mp_SigBit));
  220.                                                 // amigaguide stuff
  221.                                                 if (Signals & ASig) {
  222.                                                     if (handle) {
  223.                                                         while (agm = GetAmigaGuideMsg(handle)) {
  224.                                                             switch (agm->agm_Type) {
  225.                                                             case ToolCmdReplyID:
  226.                                                                 break;
  227.                                                             case ToolStatusID:
  228.                                                                 break;
  229.                                                             default:
  230.                                                                 break;
  231.                                                             }
  232.                                                             ReplyAmigaGuideMsg(agm);
  233.                                                         }
  234.                                                     }
  235.                                                 }
  236.                                                 // Normal stuff
  237.                                                 if (Signals & (1L << TSMorphPrefsWnd->UserPort->mp_SigBit)) {
  238.                                                     running = HandleTSMorphPrefsIDCMP();
  239.                                                 }
  240.                                                 // Close everything down
  241.                                             }
  242.                                         }
  243.                                         CloseTSMorphPrefsWindow();
  244.                                     }
  245.                                     CloseDownScreen();
  246.                                     FreeFileRequest(filereq);
  247.                                 }
  248.                                 CloseLibrary(IconBase);
  249.                             }
  250.                             CloseLibrary(AslBase);
  251.                         }
  252.                         CloseLibrary(UtilityBase);
  253.                     }
  254.                     CloseLibrary(GfxBase);
  255.                 }
  256.                 CloseLibrary(DiskfontBase);
  257.             }
  258.             CloseLibrary(GadToolsBase);
  259.         }
  260.         CloseLibrary(IntuitionBase);
  261.     }
  262.     if (AmigaGuideBase) {
  263.         if (handle) {
  264.             CloseAmigaGuide(handle);
  265.         }
  266.         CloseLibrary(AmigaGuideBase);
  267.     }
  268. }
  269.  
  270. /* Display help using amigaguide (if available)
  271.  * based on a number
  272.  */
  273. void
  274. help(ULONG helpnum) {
  275.     if (handle) {
  276.         SetAmigaGuideContext(handle,helpnum,NULL);
  277.         SendAmigaGuideContext(handle,NULL);
  278.     }
  279. }
  280.  
  281.  
  282. int
  283. CustomDepthClicked( void ) {
  284.     /* routine when gadget "Depth" is clicked. */
  285.     CustomDepth = TSMorphPrefsMsg.Code;
  286.     return 1;
  287. }
  288.  
  289. int
  290. DXClicked( void ) {
  291.     /* routine when gadget "DX" is clicked. */
  292.     DX = TSMorphPrefsMsg.Code;
  293.     return 1;
  294. }
  295.  
  296. int DYClicked( void ) {
  297.     /* routine when gadget "DY" is clicked. */
  298.     DY = TSMorphPrefsMsg.Code;
  299.     return 1;
  300. }
  301.  
  302. int
  303. ModeClicked( void ) {
  304.     /* routine when gadget "(OPEN MODE)" is clicked. */
  305.     OpenMode = TSMorphPrefsMsg.Code;
  306.     return 1;
  307. }
  308.  
  309. int
  310. SaveFormatClicked( void ) {
  311.     /* routine when gadget "SAVEFORMAT" is clicked. */
  312.     SaveFormat = TSMorphPrefsMsg.Code;
  313.     // only enable Quality on JPEG and JPEGT
  314.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  315.                             GA_Disabled, ((SaveFormat == 5)|(SaveFormat == 6))?FALSE:TRUE,
  316.                             TAG_END);
  317.     return 1;
  318. }
  319.  
  320. int
  321. QualityClicked( void ) {
  322.     /* routine when gadget "QUALITY" is clicked. */
  323.     Quality = TSMorphPrefsMsg.Code;
  324.     return 1;
  325. }
  326.  
  327. int
  328. AntiAliasClicked( void ) {
  329.     /* routine when gadget "AntiA" is clicked. */
  330.     AntiAlias = !AntiAlias;
  331.     return 1;
  332. }
  333.  
  334. int
  335. DepthClicked( void ) {
  336.     /* routine when gadget "Depth" is clicked. */
  337.     Depth = TSMorphPrefsMsg.Code;
  338.     return 1;
  339. }
  340.  
  341. int
  342. ZoomClicked( void ) {
  343.     /* routine when gadget "Zoom" is clicked. */
  344.     Zoom = TSMorphPrefsMsg.Code;
  345.     return 1;
  346. }
  347.  
  348. int
  349. PaletteClicked( void ) {
  350.     /* routine when gadget "Palette" is clicked. */
  351.     Palette = TSMorphPrefsMsg.Code;
  352.     return 1;
  353. }
  354.  
  355. int
  356. OpenModeClicked( void ) {
  357.     /* routine when gadget "Mode" is clicked. */
  358.     OpenMode = TSMorphPrefsMsg.Code;
  359.     return 1;
  360. }
  361.  
  362. int
  363. HelpClicked( void ) {
  364.     /* routine when gadget "Help" is clicked. */
  365.     Help = !Help;
  366.     return 1;
  367. }
  368.  
  369. int
  370. KeepPrefsClicked( void ) {
  371.     /* routine when gadget "Prefs" is clicked. */
  372.     KeepPrefs = !KeepPrefs;
  373.     return 1;
  374. }
  375.  
  376. int
  377. ProjectClicked( void ) {
  378.     /* routine when gadget "Project" is clicked. */
  379.     ProjectI = !ProjectI;
  380.     return 1;
  381. }
  382.  
  383. int
  384. PrefsClicked( void ) {
  385.     /* routine when gadget "Prefs" is clicked. */
  386.     PrefsI = !PrefsI;
  387.     return 1;
  388. }
  389.  
  390. int
  391. RenderClicked( void ) {
  392.     /* routine when gadget "Render" is clicked. */
  393.     RenderI = !RenderI;
  394.     return 1;
  395. }
  396.  
  397. int
  398. SaveClicked( void ) {
  399.     /* routine when gadget "Save" is clicked. */
  400.     SaveSettings("ENVARC:TSMorph/TSMorph.prefs");
  401.     SaveSettings("ENV:TSMorph/TSMorph.prefs");
  402.     return 0;
  403. }
  404.  
  405. int
  406. UseClicked( void ) {
  407.     /* routine when gadget "Use" is clicked. */
  408.     SaveSettings("ENV:TSMorph/TSMorph.prefs");
  409.     return 0;
  410. }
  411.  
  412. int
  413. CancelClicked( void ) {
  414.     /* routine when gadget "Cancel" is clicked. */
  415.     // nothing
  416.     return 0;
  417. }
  418.  
  419. int
  420. CustomModeClicked( void ) {
  421.     /* routine when gadget "Custom Screen" is clicked. */
  422.     CustomMode = TSMorphPrefsMsg.Code;
  423.     return 1;
  424. }
  425.  
  426. int
  427. PreviewClicked( void ) {
  428.     /* routine when gadget "Preview" is clicked. */
  429.     // display help if required
  430.     if (TSMorphPrefsMsg.Code == 0x5F) {
  431.         help(22);
  432.     }
  433.     return 1;
  434. }
  435.  
  436. int
  437. LoadClicked( void ) {
  438.     /* routine when gadget "Load" is clicked. */
  439.     // display help if required
  440.     if (TSMorphPrefsMsg.Code == 0x5F) {
  441.         help(13);
  442.     }
  443.     return 1;
  444. }
  445.  
  446. int
  447. PreClicked( void ) {
  448.     /* routine when gadget "Pre" is clicked. */
  449.     // display help if required
  450.     if (TSMorphPrefsMsg.Code == 0x5F) {
  451.         help(16);
  452.     }
  453.     return 1;
  454. }
  455.  
  456. int
  457. PostClicked( void ) {
  458.     /* routine when gadget "Post" is clicked. */
  459.     // display help if required
  460.     if (TSMorphPrefsMsg.Code == 0x5F) {
  461.         help(15);
  462.     }
  463.     return 1;
  464. }
  465.  
  466. int
  467. MorphScreenClicked( void ) {
  468.     /* routine when gadget "TSMorph" is clicked. */
  469.     // display help if required
  470.     if (TSMorphPrefsMsg.Code == 0x5F) {
  471.         help(7);
  472.     }
  473.     return 1;
  474. }
  475.  
  476. int
  477. RenderScreenClicked( void ) {
  478.     /* routine when gadget "Render" is clicked. */
  479.     // display help if required
  480.     if (TSMorphPrefsMsg.Code == 0x5F) {
  481.         help(17);
  482.     }
  483.     return 1;
  484. }
  485.  
  486. int
  487. TSMorphPrefsOpen( void ) {
  488.     /* routine when (sub)item "Open..." is selected. */
  489.     LoadSettings(NULL);
  490.     return 1;
  491. }
  492.  
  493. int
  494. TSMorphPrefsSaveAs( void ) {
  495.     /* routine when (sub)item "Save As..." is selected. */
  496.     SaveSettings(NULL);
  497.     return 1;
  498. }
  499.  
  500. int
  501. TSMorphPrefsQuit( void ) {
  502.     /* routine when (sub)item "Quit" is selected. */
  503.     // nothing
  504.     return 0;
  505. }
  506.  
  507. int
  508. TSMorphPrefsResetToDefaults( void ) {
  509.     /* routine when (sub)item "Reset To Defaults" is selected. */
  510.     Zoom = 1;
  511.     Palette = 0;
  512.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  513.                             GTST_String,"",
  514.                             TAG_END);
  515.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  516.                             GTST_String,"",
  517.                             TAG_END);
  518.     ProjectI = TRUE;
  519.     RenderI = FALSE;
  520.     PrefsI = TRUE;
  521.     KeepPrefs = TRUE;
  522.     OpenMode = 2;
  523.     SaveFormat = 0;
  524.     Quality = 75;
  525.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  526.                             GTST_String,"Rexx/Prescript",
  527.                             TAG_END);
  528.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  529.                             GTST_String,"Rexx/Postscript",
  530.                             TAG_END);
  531.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  532.                             GTST_String,"Rexx/Loadscript",
  533.                             TAG_END);
  534.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  535.                             GTST_String,"Rexx/Preview",
  536.                             TAG_END);
  537.     DX = 0;
  538.     DY = 0;
  539.     Depth = 2;
  540.     RenderMode = 0;
  541.     CustomMode = 0;
  542.     CustomDepth = 4;
  543.     UpdateGadgets();
  544.     return 1;
  545. }
  546.  
  547. // Update gadgets based on current settings
  548. void
  549. UpdateGadgets(void) {
  550.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomDepth],TSMorphPrefsWnd,NULL,
  551.                             GTSL_Level,CustomDepth,
  552.                             TAG_END);
  553.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DX],TSMorphPrefsWnd,NULL,
  554.                             GTSL_Level,DX,
  555.                             TAG_END);
  556.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DY],TSMorphPrefsWnd,NULL,
  557.                             GTSL_Level,DY,
  558.                             TAG_END);
  559.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Mode],TSMorphPrefsWnd,NULL,
  560.                             GTCY_Active,RenderMode,
  561.                             TAG_END);
  562.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_SaveFormat],TSMorphPrefsWnd,NULL,
  563.                             GTCY_Active,SaveFormat,
  564.                             TAG_END);
  565.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  566.                             GTSL_Level,Quality,
  567.                             GA_Disabled, ((SaveFormat == 5)|(SaveFormat == 6))?FALSE:TRUE,
  568.                             TAG_END);
  569.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_AntiAlias],TSMorphPrefsWnd,NULL,
  570.                             GTCB_Checked,AntiAlias,
  571.                             TAG_END);
  572.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Depth],TSMorphPrefsWnd,NULL,
  573.                             GTSL_Level,Depth,
  574.                             TAG_END);
  575.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Zoom],TSMorphPrefsWnd,NULL,
  576.                             GTCY_Active,Zoom,
  577.                             TAG_END);
  578.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Palette],TSMorphPrefsWnd,NULL,
  579.                             GTCY_Active,Palette,
  580.                             TAG_END);
  581.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_OpenMode],TSMorphPrefsWnd,NULL,
  582.                             GTCY_Active,OpenMode,
  583.                             TAG_END);
  584.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Help],TSMorphPrefsWnd,NULL,
  585.                             GTCB_Checked,Help,
  586.                             TAG_END);
  587.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_KeepPrefs],TSMorphPrefsWnd,NULL,
  588.                             GTCB_Checked,KeepPrefs,
  589.                             TAG_END);
  590.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Project],TSMorphPrefsWnd,NULL,
  591.                             GTCB_Checked,ProjectI,
  592.                             TAG_END);
  593.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Prefs],TSMorphPrefsWnd,NULL,
  594.                             GTCB_Checked,PrefsI,
  595.                             TAG_END);
  596.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Render],TSMorphPrefsWnd,NULL,
  597.                             GTCB_Checked,RenderI,
  598.                             TAG_END);
  599.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomMode],TSMorphPrefsWnd,NULL,
  600.                             GTLV_Top,CustomMode,
  601.                             GTLV_Selected,CustomMode,
  602.                             TAG_END);
  603. }
  604.  
  605. int
  606. TSMorphPrefsLastSaved( void ) {
  607.     /* routine when (sub)item "Last Saved" is selected. */
  608.     LoadSettings("ENVARC:TSMorph/TSMorph.prefs");
  609.     return 1;
  610. }
  611.  
  612. int
  613. TSMorphPrefsRestore( void ) {
  614.     /* routine when (sub)item "Restore" is selected. */
  615.     LoadSettings("ENV:TSMorph/TSMorph.prefs");
  616.     return 1;
  617. }
  618.  
  619. int
  620. TSMorphPrefsCreateIcons( void ) {
  621.     /* routine when (sub)item "Create Icons?" is selected. */
  622.     Icons = !Icons;
  623.     return 1;
  624. }
  625.  
  626. int
  627. TSMorphPrefsCloseWindow( void ) {
  628.     /* routine for "IDCMP_CLOSEWINDOW". */
  629.     // nothing
  630.     return 0;
  631. }
  632.  
  633. int
  634. TSMorphPrefsRawKey(void) {
  635.     // Display help if 'Help' pressed
  636.     UWORD X,Y;
  637.     ULONG HNum;
  638.     switch (TSMorphPrefsMsg.Code) {
  639.     case 0x5F:
  640.         X = TSMorphPrefsWnd->MouseX;
  641.         Y = TSMorphPrefsWnd->MouseY;
  642.         if (PointInBox(X,Y,0,0,
  643.                         20,TSMorphPrefsWnd->BorderTop))
  644.             HNum = 25;
  645.         else
  646.         if (PointInBox(X,Y,(TSMorphPrefsWnd->Width - 24),0,
  647.                                 TSMorphPrefsWnd->Width,TSMorphPrefsWnd->BorderTop))
  648.             HNum = 26;
  649.         else
  650.         if (PointInBox(X,Y,(TSMorphPrefsWnd->Width - 24 - 24),0,
  651.                                 (TSMorphPrefsWnd->Width - 24),TSMorphPrefsWnd->BorderTop))
  652.             HNum = 27;
  653.         else
  654.         if (PointInBox(X,Y,Rect[GDX_CustomDepth].MinX,Rect[GDX_CustomDepth].MinY,
  655.                         Rect[GDX_CustomDepth].MaxX,Rect[GDX_CustomDepth].MaxY))
  656.             HNum = 24;
  657.         else
  658.         if (PointInBox(X,Y,Rect[GDX_DX].MinX,Rect[GDX_DX].MinY,
  659.                         Rect[GDX_DX].MaxX,Rect[GDX_DX].MaxY))
  660.             HNum = 11;
  661.         else
  662.         if (PointInBox(X,Y,Rect[GDX_DY].MinX,Rect[GDX_DY].MinY,
  663.                         Rect[GDX_DY].MaxX,Rect[GDX_DY].MaxY))
  664.             HNum = 12;
  665.         else
  666.         if (PointInBox(X,Y,Rect[GDX_Mode].MinX,Rect[GDX_Mode].MinY,
  667.                         Rect[GDX_Mode].MaxX,Rect[GDX_Mode].MaxY))
  668.             HNum = 14;
  669.         else
  670.         if (PointInBox(X,Y,Rect[GDX_SaveFormat].MinX,Rect[GDX_SaveFormat].MinY,
  671.                         Rect[GDX_SaveFormat].MaxX,Rect[GDX_SaveFormat].MaxY))
  672.             HNum = 19;
  673.         else
  674.         if (PointInBox(X,Y,Rect[GDX_Quality].MinX,Rect[GDX_Quality].MinY,
  675.                         Rect[GDX_Quality].MaxX,Rect[GDX_Quality].MaxY))
  676.             HNum = 18;
  677.         else
  678.         if (PointInBox(X,Y,Rect[GDX_AntiAlias].MinX,Rect[GDX_AntiAlias].MinY,
  679.                         Rect[GDX_AntiAlias].MaxX,Rect[GDX_AntiAlias].MaxY))
  680.             HNum = 20;
  681.         else
  682.         if (PointInBox(X,Y,Rect[GDX_Depth].MinX,Rect[GDX_Depth].MinY,
  683.                         Rect[GDX_Depth].MaxX,Rect[GDX_Depth].MaxY))
  684.             HNum = 10;
  685.         else
  686.         if (PointInBox(X,Y,Rect[GDX_Zoom].MinX,Rect[GDX_Zoom].MinY,
  687.                         Rect[GDX_Zoom].MaxX,Rect[GDX_Zoom].MaxY))
  688.             HNum = 8;
  689.         else
  690.         if (PointInBox(X,Y,Rect[GDX_Palette].MinX,Rect[GDX_Palette].MinY,
  691.                         Rect[GDX_Palette].MaxX,Rect[GDX_Palette].MaxY))
  692.             HNum = 3;
  693.         else
  694.         if (PointInBox(X,Y,Rect[GDX_OpenMode].MinX,Rect[GDX_OpenMode].MinY,
  695.                         Rect[GDX_OpenMode].MaxX,Rect[GDX_OpenMode].MaxY))
  696.             HNum = 6;
  697.         else
  698.         if (PointInBox(X,Y,Rect[GDX_Help].MinX,Rect[GDX_Help].MinY,
  699.                         Rect[GDX_Help].MaxX,Rect[GDX_Help].MaxY))
  700.             HNum = 21;
  701.         else
  702.         if (PointInBox(X,Y,Rect[GDX_KeepPrefs].MinX,Rect[GDX_KeepPrefs].MinY,
  703.                         Rect[GDX_KeepPrefs].MaxX,Rect[GDX_KeepPrefs].MaxY))
  704.             HNum = 2;
  705.         else
  706.         if (PointInBox(X,Y,Rect[GDX_Project].MinX,Rect[GDX_Project].MinY,
  707.                         Rect[GDX_Project].MaxX,Rect[GDX_Project].MaxY))
  708.             HNum = 4;
  709.         else
  710.         if (PointInBox(X,Y,Rect[GDX_Prefs].MinX,Rect[GDX_Prefs].MinY,
  711.                         Rect[GDX_Prefs].MaxX,Rect[GDX_Prefs].MaxY))
  712.             HNum = 5;
  713.         else
  714.         if (PointInBox(X,Y,Rect[GDX_Render].MinX,Rect[GDX_Render].MinY,
  715.                         Rect[GDX_Render].MaxX,Rect[GDX_Render].MaxY))
  716.             HNum = 9;
  717.         else
  718.         if (PointInBox(X,Y,Rect[GDX_Save].MinX,Rect[GDX_Save].MinY,
  719.                         Rect[GDX_Save].MaxX,Rect[GDX_Save].MaxY))
  720.             HNum = 29;
  721.         else
  722.         if (PointInBox(X,Y,Rect[GDX_Use].MinX,Rect[GDX_Use].MinY,
  723.                         Rect[GDX_Use].MaxX,Rect[GDX_Use].MaxY))
  724.             HNum = 30;
  725.         else
  726.         if (PointInBox(X,Y,Rect[GDX_Cancel].MinX,Rect[GDX_Cancel].MinY,
  727.                         Rect[GDX_Cancel].MaxX,Rect[GDX_Cancel].MaxY))
  728.             HNum = 31;
  729.         else
  730.         if (PointInBox(X,Y,Rect[GDX_CustomMode].MinX,Rect[GDX_CustomMode].MinY,
  731.                         Rect[GDX_CustomMode].MaxX,Rect[GDX_CustomMode].MaxY))
  732.             HNum = 23;
  733.         else
  734.         if (PointInBox(X,Y,Rect[GDX_Preview].MinX,Rect[GDX_Preview].MinY,
  735.                         Rect[GDX_Preview].MaxX,Rect[GDX_Preview].MaxY))
  736.             HNum = 22;
  737.         else
  738.         if (PointInBox(X,Y,Rect[GDX_Load].MinX,Rect[GDX_Load].MinY,
  739.                         Rect[GDX_Load].MaxX,Rect[GDX_Load].MaxY))
  740.             HNum = 13;
  741.         else
  742.         if (PointInBox(X,Y,Rect[GDX_Pre].MinX,Rect[GDX_Pre].MinY,
  743.                         Rect[GDX_Pre].MaxX,Rect[GDX_Pre].MaxY))
  744.             HNum = 16;
  745.         else
  746.         if (PointInBox(X,Y,Rect[GDX_Post].MinX,Rect[GDX_Post].MinY,
  747.                         Rect[GDX_Post].MaxX,Rect[GDX_Post].MaxY))
  748.             HNum = 15;
  749.         else
  750.         if (PointInBox(X,Y,Rect[GDX_MorphScreen].MinX,Rect[GDX_MorphScreen].MinY,
  751.                         Rect[GDX_MorphScreen].MaxX,Rect[GDX_MorphScreen].MaxY))
  752.             HNum = 7;
  753.         else
  754.         if (PointInBox(X,Y,Rect[GDX_RenderScreen].MinX,Rect[GDX_RenderScreen].MinY,
  755.                         Rect[GDX_RenderScreen].MaxX,Rect[GDX_RenderScreen].MaxY))
  756.             HNum = 17;
  757.         else
  758.             HNum = 28;
  759.         help(HNum);
  760.         break;
  761.     }
  762.     return 1;
  763. }
  764.  
  765. int
  766. TSMorphPrefsMenuHelp(void) {
  767.     // Help on a menu
  768.     ULONG HNum;
  769.     // start by reseting any changed menu items
  770.     ClearMenuStrip(TSMorphPrefsWnd);
  771.     if (Icons) {
  772.         (ItemAddress(TSMorphPrefsMenus,FULLMENUNUM(2,0,NOSUB)))->Flags |= CHECKED;
  773.     }
  774.     else {
  775.         (ItemAddress(TSMorphPrefsMenus,FULLMENUNUM(2,0,NOSUB)))->Flags &= ~CHECKED;
  776.     }
  777.     ResetMenuStrip(TSMorphPrefsWnd,TSMorphPrefsMenus);
  778.     // determine and display help node
  779.     switch (TSMorphPrefsMsg.Code) {
  780.     case FULLMENUNUM(0,NOITEM,NOSUB):
  781.     case FULLMENUNUM(0,2,NOSUB):
  782.         HNum = 32;
  783.         break;
  784.     case FULLMENUNUM(0,0,NOSUB):
  785.         HNum = 33;
  786.         break;
  787.     case FULLMENUNUM(0,1,NOSUB):
  788.         HNum = 34;
  789.         break;
  790.     case FULLMENUNUM(0,3,NOSUB):
  791.         HNum = 35;
  792.         break;
  793.     case FULLMENUNUM(1,NOITEM,NOSUB):
  794.         HNum = 36;
  795.         break;
  796.     case FULLMENUNUM(1,0,NOSUB):
  797.         HNum = 37;
  798.         break;
  799.     case FULLMENUNUM(1,1,NOSUB):
  800.         HNum = 38;
  801.         break;
  802.     case FULLMENUNUM(1,2,NOSUB):
  803.         HNum = 39;
  804.         break;
  805.     case FULLMENUNUM(2,NOITEM,NOSUB):
  806.         HNum = 40;
  807.         break;
  808.     case FULLMENUNUM(2,0,NOSUB):
  809.         HNum = 41;
  810.         break;
  811.     default:
  812.         HNum = 42;
  813.         break;
  814.     }
  815.     help(HNum);
  816.     return 1;
  817. }
  818.  
  819. extern USHORT __chip BusyPointerData[] =
  820. {
  821.     0x0000,0x0000,
  822.     0x0400,0x07C0,0x0000,0x07C0,0x0100,0x0380,0x0000,0x07E0,
  823.     0x07C0,0x1FF8,0x1FF0,0x3FEC,0x3FF8,0x7FDE,0x3FF8,0x7FBE,
  824.     0x7FFC,0xFF7F,0x7EFC,0xFFFF,0x7FFC,0xFFFF,0x3FF8,0x7FFE,
  825.     0x3FF8,0x7FFE,0x1FF0,0x3FFC,0x07C0,0x1FF8,0x0000,0x07E0,
  826.     0x0000,0x0000,
  827. };
  828.  
  829. struct Requester waitRequest;
  830.  
  831. void DisableWindow(void) {
  832.     InitRequester(&waitRequest);
  833.     Request(&waitRequest,TSMorphPrefsWnd);
  834.     SetPointer(TSMorphPrefsWnd, BusyPointerData, 16, 16, -6, 0);
  835. /* Does not actually disable the gadgets any more
  836.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomDepth],TSMorphPrefsWnd,NULL,
  837.                             GA_Disabled,TRUE,
  838.                             TAG_END);
  839.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DX],TSMorphPrefsWnd,NULL,
  840.                             GA_Disabled,TRUE,
  841.                             TAG_END);
  842.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DY],TSMorphPrefsWnd,NULL,
  843.                             GA_Disabled,TRUE,
  844.                             TAG_END);
  845.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Mode],TSMorphPrefsWnd,NULL,
  846.                             GA_Disabled,TRUE,
  847.                             TAG_END);
  848.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_SaveFormat],TSMorphPrefsWnd,NULL,
  849.                             GA_Disabled,TRUE,
  850.                             TAG_END);
  851.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  852.                             GA_Disabled,TRUE,
  853.                             TAG_END);
  854.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_AntiAlias],TSMorphPrefsWnd,NULL,
  855.                             GA_Disabled,TRUE,
  856.                             TAG_END);
  857.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Depth],TSMorphPrefsWnd,NULL,
  858.                             GA_Disabled,TRUE,
  859.                             TAG_END);
  860.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Zoom],TSMorphPrefsWnd,NULL,
  861.                             GA_Disabled,TRUE,
  862.                             TAG_END);
  863.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Palette],TSMorphPrefsWnd,NULL,
  864.                             GA_Disabled,TRUE,
  865.                             TAG_END);
  866.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_OpenMode],TSMorphPrefsWnd,NULL,
  867.                             GA_Disabled,TRUE,
  868.                             TAG_END);
  869.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Help],TSMorphPrefsWnd,NULL,
  870.                             GA_Disabled,TRUE,
  871.                             TAG_END);
  872.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_KeepPrefs],TSMorphPrefsWnd,NULL,
  873.                             GA_Disabled,TRUE,
  874.                             TAG_END);
  875.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Project],TSMorphPrefsWnd,NULL,
  876.                             GA_Disabled,TRUE,
  877.                             TAG_END);
  878.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Prefs],TSMorphPrefsWnd,NULL,
  879.                             GA_Disabled,TRUE,
  880.                             TAG_END);
  881.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Render],TSMorphPrefsWnd,NULL,
  882.                             GA_Disabled,TRUE,
  883.                             TAG_END);
  884.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Save],TSMorphPrefsWnd,NULL,
  885.                             GA_Disabled,TRUE,
  886.                             TAG_END);
  887.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Use],TSMorphPrefsWnd,NULL,
  888.                             GA_Disabled,TRUE,
  889.                             TAG_END);
  890.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Cancel],TSMorphPrefsWnd,NULL,
  891.                             GA_Disabled,TRUE,
  892.                             TAG_END);
  893.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  894.                             GA_Disabled,TRUE,
  895.                             TAG_END);
  896.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  897.                             GA_Disabled,TRUE,
  898.                             TAG_END);
  899.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  900.                             GA_Disabled,TRUE,
  901.                             TAG_END);
  902.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  903.                             GA_Disabled,TRUE,
  904.                             TAG_END);
  905.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  906.                             GA_Disabled,TRUE,
  907.                             TAG_END);
  908.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  909.                             GA_Disabled,TRUE,
  910.                             TAG_END);
  911.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  912.                             GA_Disabled,TRUE,
  913.                             TAG_END);
  914. */
  915. }
  916.  
  917. void EnableWindow(void) {
  918.     EndRequest(&waitRequest,TSMorphPrefsWnd);
  919.     ClearPointer(TSMorphPrefsWnd);
  920. /* gadgets are not disabled anymore
  921.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomDepth],TSMorphPrefsWnd,NULL,
  922.                             GA_Disabled,FALSE,
  923.                             TAG_END);
  924.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DX],TSMorphPrefsWnd,NULL,
  925.                             GA_Disabled,FALSE,
  926.                             TAG_END);
  927.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DY],TSMorphPrefsWnd,NULL,
  928.                             GA_Disabled,FALSE,
  929.                             TAG_END);
  930.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Mode],TSMorphPrefsWnd,NULL,
  931.                             GA_Disabled,FALSE,
  932.                             TAG_END);
  933.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_SaveFormat],TSMorphPrefsWnd,NULL,
  934.                             GA_Disabled,FALSE,
  935.                             TAG_END);
  936.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  937.                             GA_Disabled, ((SaveFormat == 5)|(SaveFormat == 6))?FALSE:TRUE,
  938.                             TAG_END);
  939.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_AntiAlias],TSMorphPrefsWnd,NULL,
  940.                             GA_Disabled,FALSE,
  941.                             TAG_END);
  942.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Depth],TSMorphPrefsWnd,NULL,
  943.                             GA_Disabled,FALSE,
  944.                             TAG_END);
  945.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Zoom],TSMorphPrefsWnd,NULL,
  946.                             GA_Disabled,FALSE,
  947.                             TAG_END);
  948.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Palette],TSMorphPrefsWnd,NULL,
  949.                             GA_Disabled,FALSE,
  950.                             TAG_END);
  951.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_OpenMode],TSMorphPrefsWnd,NULL,
  952.                             GA_Disabled,FALSE,
  953.                             TAG_END);
  954.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Help],TSMorphPrefsWnd,NULL,
  955.                             GA_Disabled,FALSE,
  956.                             TAG_END);
  957.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_KeepPrefs],TSMorphPrefsWnd,NULL,
  958.                             GA_Disabled,FALSE,
  959.                             TAG_END);
  960.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Project],TSMorphPrefsWnd,NULL,
  961.                             GA_Disabled,FALSE,
  962.                             TAG_END);
  963.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Prefs],TSMorphPrefsWnd,NULL,
  964.                             GA_Disabled,FALSE,
  965.                             TAG_END);
  966.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Render],TSMorphPrefsWnd,NULL,
  967.                             GA_Disabled,FALSE,
  968.                             TAG_END);
  969.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Save],TSMorphPrefsWnd,NULL,
  970.                             GA_Disabled,FALSE,
  971.                             TAG_END);
  972.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Use],TSMorphPrefsWnd,NULL,
  973.                             GA_Disabled,FALSE,
  974.                             TAG_END);
  975.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Cancel],TSMorphPrefsWnd,NULL,
  976.                             GA_Disabled,FALSE,
  977.                             TAG_END);
  978.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  979.                             GA_Disabled,FALSE,
  980.                             TAG_END);
  981.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  982.                             GA_Disabled,FALSE,
  983.                             TAG_END);
  984.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  985.                             GA_Disabled,FALSE,
  986.                             TAG_END);
  987.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  988.                             GA_Disabled,FALSE,
  989.                             TAG_END);
  990.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  991.                             GA_Disabled,FALSE,
  992.                             TAG_END);
  993.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  994.                             GA_Disabled,FALSE,
  995.                             TAG_END);
  996.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  997.                             GA_Disabled,FALSE,
  998.                             TAG_END);
  999. */
  1000. }
  1001.  
  1002. // Save settings to a file
  1003. void
  1004. SaveSettings(char *filename) {
  1005.     char *ifilename = NULL;
  1006.     BPTR fh;
  1007.     BOOL ok=TRUE;
  1008.     char buffer[65];
  1009.     struct DiskObject *MyDiskObject;    // The Icon
  1010.     char *tstr;
  1011.     DisableWindow();
  1012.     if (!filename) {
  1013.         if (GetAFile("TSMorph.prefs","Save TSMorph Preferences",FILF_SAVE)) {
  1014.             ifilename = TempFilename;
  1015.         }
  1016.     }
  1017.     else {
  1018.         ifilename = filename;
  1019.     }
  1020.     if (ifilename) {
  1021.         if (fh = Open(ifilename,MODE_NEWFILE)) {
  1022.             FPuts(fh,";TSMorph parameters\n");
  1023.             FPuts(fh,"CREATEICONS=");
  1024.             FPuts(fh,ProjectI?"YES\n":"NO\n");
  1025.             FPuts(fh,"CHANGEPALETTE=");
  1026.             FPuts(fh,(Palette==2)?"OFF\n":(Palette?"NO\n":"YES\n"));
  1027.             FPuts(fh,"ZOOM=");
  1028.             FPuts(fh,(Zoom==2)?"OFF\n":(Zoom?"NO\n":"YES\n"));
  1029.             FPuts(fh,"OPENMODE=");
  1030.             switch (OpenMode) {
  1031.             case 0:
  1032.                 FPuts(fh,"IFILBM\n");
  1033.                 break;
  1034.             case 1:
  1035.                 FPuts(fh,"ALWAYS\n");
  1036.                 break;
  1037.             case 3:
  1038.                 FPuts(fh,"REMAP\n");
  1039.                 break;
  1040.             case 4:
  1041.                 FPuts(fh,"OPAL\n");
  1042.                 break;
  1043.             case 2:
  1044.             default:
  1045.                 FPuts(fh,"IFCOLOURS\n");
  1046.                 break;
  1047.             }
  1048.             if (*(tstr = GetString(TSMorphPrefsGadgets[GDX_MorphScreen]))) {
  1049.                 FPuts(fh,"PUBSCREEN=");
  1050.                 FPuts(fh,tstr);
  1051.                 FPuts(fh,"\n");
  1052.             }
  1053.             else {
  1054.                 FPuts(fh,";PUBSCREEN=\n");
  1055.             }
  1056.             if (CustomMode) {
  1057.                 FPuts(fh,"CUSTOMMODE=");
  1058.                 FPuts(fh,CustomScreen[CustomMode]);
  1059.                 FPuts(fh,"\n");
  1060.             }
  1061.             else {
  1062.                 FPuts(fh,";CUSTOMMODE=\n");
  1063.             }
  1064.             sprintf(buffer,"CUSTOMDEPTH=%ld\n",CustomDepth);
  1065.             FPuts(fh,buffer);
  1066.             FPuts(fh,"PREVIEW=");
  1067.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Preview]));
  1068.             FPuts(fh,"\n");
  1069.             FPuts(fh,"HELP=");
  1070.             FPuts(fh,Help?"YES\n":"NO\n");
  1071.             FPuts(fh,";Prefs parameters\n");
  1072.             FPuts(fh,"CREATEICONSP=");
  1073.             FPuts(fh,PrefsI?"YES\n":"NO\n");
  1074.             FPuts(fh,"KEEPSETTINGS=");
  1075.             FPuts(fh,KeepPrefs?"YES\n":"NO\n");
  1076.             FPuts(fh,";TSMorph-render parameters\n");
  1077.             FPuts(fh,"CREATEICONSR=");
  1078.             FPuts(fh,RenderI?"YES\n":"NO\n");
  1079.             sprintf(buffer,"DX=%ld\n",DX);
  1080.             FPuts(fh,buffer);
  1081.             sprintf(buffer,"DY=%ld\n",DY);
  1082.             FPuts(fh,buffer);
  1083.             FPuts(fh,"LOADSCRIPT=");
  1084.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Load]));
  1085.             FPuts(fh,"\n");
  1086.             FPuts(fh,"PRESCRIPT=");
  1087.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Pre]));
  1088.             FPuts(fh,"\n");
  1089.             FPuts(fh,"POSTSCRIPT=");
  1090.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Post]));
  1091.             FPuts(fh,"\n");
  1092.             sprintf(buffer,"DEPTH=%ld\n",Depth);
  1093.             FPuts(fh,buffer);
  1094.             sprintf(buffer,"MODE=%ld\n",RenderMode);
  1095.             FPuts(fh,buffer);
  1096.             FPuts(fh,"SAVEFORMAT=");
  1097.             switch (SaveFormat) {
  1098.             case 1:
  1099.                 FPuts(fh,"OPAL24\n");
  1100.                 break;
  1101.             case 2:
  1102.                 FPuts(fh,"OPAL24T\n");
  1103.                 break;
  1104.             case 3:
  1105.                 FPuts(fh,"OPAL24F\n");
  1106.                 break;
  1107.             case 4:
  1108.                 FPuts(fh,"OPAL24FT\n");
  1109.                 break;
  1110.             case 5:
  1111.                 FPuts(fh,"JPEG\n");
  1112.                 break;
  1113.             case 6:
  1114.                 FPuts(fh,"JPEGT\n");
  1115.                 break;
  1116.             case 7:
  1117.                 FPuts(fh,"PPM\n");
  1118.                 break;
  1119.             case 8:
  1120.                 FPuts(fh,"BW16\n");
  1121.                 break;
  1122.             case 9:
  1123.                 FPuts(fh,"BW256\n");
  1124.                 break;
  1125.             case 10:
  1126.                 FPuts(fh,"HAM6\n");
  1127.                 break;
  1128.             case 11:
  1129.                 FPuts(fh,"HAM8\n");
  1130.                 break;
  1131.             case 12:
  1132.                 FPuts(fh,"DCTV3\n");
  1133.                 break;
  1134.             case 13:
  1135.                 FPuts(fh,"DCTV4\n");
  1136.                 break;
  1137.             case 0:
  1138.             default:
  1139.                 FPuts(fh,"ILBM24\n");
  1140.                 break;
  1141.             }
  1142.             sprintf(buffer,"QUALITY=%ld\n",Quality);
  1143.             FPuts(fh,buffer);
  1144.             if (*(tstr = GetString(TSMorphPrefsGadgets[GDX_RenderScreen]))) {
  1145.                 FPuts(fh,"PUBSCREENR=");
  1146.                 FPuts(fh,tstr);
  1147.                 FPuts(fh,"\n");
  1148.             }
  1149.             else {
  1150.                 FPuts(fh,";PUBSCREENR=\n");
  1151.             }
  1152.             FPuts(fh,"ANTIALIAS=");
  1153.             FPuts(fh,AntiAlias?"YES\n":"NO\n");
  1154.             if (Icons) {
  1155.                 if (MyDiskObject = GetDiskObject(ifilename)) {
  1156.                     FreeDiskObject(MyDiskObject);
  1157.                 }
  1158.                 else {
  1159.                     if ((MyDiskObject = GetDiskObject("ENV:TSMorph/def_prefs")) ||
  1160.                         (MyDiskObject = GetDiskObject("ENV:SYS/def_prefs")) ||
  1161.                          (MyDiskObject = GetDefDiskObject(WBPROJECT))) {
  1162.                         PutDiskObject(ifilename,MyDiskObject);
  1163.                         FreeDiskObject(MyDiskObject);
  1164.                     }
  1165.                 }
  1166.             }
  1167.             if (!Close(fh)) {
  1168.                 ok = FALSE;
  1169.             }
  1170.         }
  1171.         else {
  1172.             ok = FALSE;
  1173.         }
  1174.     }
  1175.     if (!ok) {
  1176.         Error("Error Saving Preferences\n'%s'",ifilename);
  1177.     }
  1178.     // Why does this call UpdateGadgets()???
  1179.     UpdateGadgets();
  1180.     EnableWindow();
  1181. }
  1182.  
  1183. // Load settings from a file
  1184. void
  1185. LoadSettings(char *filename) {
  1186.     BPTR fh;
  1187.     BOOL ok=TRUE;
  1188.     char string[65];
  1189.     char *ifilename = NULL;
  1190.  
  1191.     DisableWindow();
  1192.     if (!filename) {
  1193.         if (GetAFile("TSMorph.prefs","Load TSMorph Preferences",0)) {
  1194.             ifilename = TempFilename;
  1195.         }
  1196.     }
  1197.     else {
  1198.         ifilename = filename;
  1199.     }
  1200.     if (ifilename) {
  1201.         TSMorphPrefsResetToDefaults();
  1202.         if (fh = Open(ifilename,MODE_OLDFILE)) {
  1203.             // If we have found a file the relevant lines
  1204.             while (FGets(fh,string,64)) {
  1205.                 // remove newline
  1206.                 string[strlen(string)-1] = '\0';
  1207.                 // ignore blank and comment lines
  1208.                 if (string[0] && (string[0]!=';')) {
  1209.                     // Clone settings in memory
  1210.                     InitParams(string);
  1211.                 }
  1212.             }
  1213.             Close(fh);
  1214.         }
  1215.         else {
  1216.             ok=FALSE;
  1217.         }
  1218.     }
  1219.     if (!ok) {
  1220.         Error("Error Loading Preferences\n'%s'",ifilename);
  1221.     }
  1222.     UpdateGadgets();
  1223.     EnableWindow();
  1224. }
  1225.  
  1226. /* Display an error message
  1227.  * ErrorMessage    : The main text
  1228.  * extra          : extra text
  1229.  */
  1230. void
  1231. Error(char *ErrorMessage,char *extra) {
  1232.     struct EasyStruct EasyStruct = {
  1233.         sizeof(struct EasyStruct),
  1234.         0,
  1235.         NULL,
  1236.         NULL,
  1237.         NULL
  1238.     };
  1239.     UBYTE *title = "TSMorph-prefs Error";
  1240.     EasyStruct.es_TextFormat = ErrorMessage;
  1241.     EasyStruct.es_Title = title;
  1242.     EasyStruct.es_GadgetFormat = "OK";
  1243.     EasyRequest(TSMorphPrefsWnd,&EasyStruct,NULL,extra);
  1244. }
  1245.  
  1246. /* Shows ASL file requester for a file
  1247.  * name    : current file name
  1248.  * Prompt: Title
  1249.  * flags    : e.g. for save flag
  1250.  * Returns: TRUE if file selected, name is TempFileName
  1251.  */
  1252. BOOL
  1253. GetAFile(char *name,char *Prompt,ULONG flags) {
  1254.     // Split of directory name
  1255.     strncpy(TempFilename,name,PathPart(name) - name);
  1256.     TempFilename[PathPart(name) - name] = 0;
  1257.     // Show requesters
  1258.     if (AslRequestTags((APTR) filereq,
  1259.                             ASL_Hail,(Tag) Prompt,
  1260.                             ASL_FuncFlags,flags,
  1261.                             ASL_Dir, (Tag) TempFilename,
  1262.                             ASL_File,(Tag) FilePart(name),
  1263.                             ASL_Window, TSMorphPrefsWnd,
  1264.                             TAG_DONE)) {
  1265.         // rejoin name
  1266.         strncpy(TempFilename,filereq->rf_Dir,256);
  1267.         AddPart(TempFilename,filereq->rf_File,256);
  1268.         return TRUE;
  1269.     }
  1270.     else {
  1271.         return FALSE;
  1272.     }
  1273. }
  1274.  
  1275. // Initialize settings values from parameters
  1276. void
  1277. InitParams(UBYTE *string) {
  1278.     UBYTE *s[2] = {NULL,NULL};
  1279.     char *s1;
  1280.     int kount;
  1281.  
  1282.     s[0] = string;
  1283.  
  1284.     if (s1 = FindToolType(s,"CREATEICONS")) {
  1285.         ProjectI = MatchToolValue(s1,"YES");
  1286.     }
  1287.     if (s1 = FindToolType(s,"CHANGEPALETTE")) {
  1288.         if (MatchToolValue(s1,"YES")) {
  1289.             Palette = 0;
  1290.         }
  1291.         else {
  1292.             if (MatchToolValue(s1,"OFF")) {
  1293.                 Palette = 2;
  1294.             }
  1295.             else {
  1296.                 Palette = 1;
  1297.             }
  1298.         }
  1299.     }
  1300.     if (s1 = FindToolType(s,"ZOOM")) {
  1301.         if (MatchToolValue(s1,"YES")) {
  1302.             Zoom = 0;
  1303.         }
  1304.         else {
  1305.             if (MatchToolValue(s1,"OFF")) {
  1306.                 Zoom = 2;
  1307.             }
  1308.             else {
  1309.                 Zoom = 1;
  1310.             }
  1311.         }
  1312.     }
  1313.     if (s1 = FindToolType(s,"OPENMODE")) {
  1314.         if (MatchToolValue(s1,"IFILBM")) {
  1315.             OpenMode = 0;
  1316.         }
  1317.         else {
  1318.             if (MatchToolValue(s1,"ALWAYS")) {
  1319.                 SaveFormat = 1;
  1320.             }
  1321.             else {
  1322.                 if (MatchToolValue(s1,"REMAP")) {
  1323.                     SaveFormat = 3;
  1324.                 }
  1325.                 else {
  1326.                     if (MatchToolValue(s1,"OPAL")) {
  1327.                         SaveFormat = 4;
  1328.                     }
  1329.                     else {
  1330.                         SaveFormat = 2;
  1331.                     }
  1332.                 }
  1333.             }
  1334.         }
  1335.     }
  1336.     if (s1 = FindToolType(s,"PUBSCREEN")) {
  1337.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  1338.                             GTST_String,s1,
  1339.                             TAG_END);
  1340.     }
  1341.     if (s1 = FindToolType(s,"CUSTOMMODE")) {
  1342.         CustomMode = 0;
  1343.         for (kount = 0;
  1344.               CustomScreen[kount];
  1345.               kount++) {
  1346.             if (!Stricmp(CustomScreen[kount],s1)) {
  1347.                 CustomMode = kount;
  1348.             }
  1349.         }
  1350.     }
  1351.     if (s1 = FindToolType(s,"CUSTOMDEPTH")) {
  1352.         StrToLong(s1,&CustomDepth);
  1353.     }
  1354.     if (s1 = FindToolType(s,"PREVIEW")) {
  1355.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  1356.                             GTST_String,s1,
  1357.                             TAG_END);
  1358.     }
  1359.     if (s1 = FindToolType(s,"HELP")) {
  1360.         Help = MatchToolValue(s1,"YES");
  1361.     }
  1362.     if (s1 = FindToolType(s,"CREATEICONSP")) {
  1363.         PrefsI = MatchToolValue(s1,"YES");
  1364.     }
  1365.     if (s1 = FindToolType(s,"KEEPSETTINGS")) {
  1366.         KeepPrefs = MatchToolValue(s1,"YES");
  1367.     }
  1368.     if (s1 = FindToolType(s,"CREATEICONSR")) {
  1369.         RenderI = MatchToolValue(s1,"YES");
  1370.     }
  1371.     if (s1 = FindToolType(s,"DX")) {
  1372.         StrToLong(s1,&DX);
  1373.     }
  1374.     if (s1 = FindToolType(s,"DY")) {
  1375.         StrToLong(s1,&DY);
  1376.     }
  1377.     if (s1 = FindToolType(s,"LOADSCRIPT")) {
  1378.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  1379.                             GTST_String,s1,
  1380.                             TAG_END);
  1381.     }
  1382.     if (s1 = FindToolType(s,"PRESCRIPT")) {
  1383.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  1384.                             GTST_String,s1,
  1385.                             TAG_END);
  1386.     }
  1387.     if (s1 = FindToolType(s,"POSTSCRIPT")) {
  1388.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  1389.                             GTST_String,s1,
  1390.                             TAG_END);
  1391.     }
  1392.     if (s1 = FindToolType(s,"DEPTH")) {
  1393.         StrToLong(s1,&Depth);
  1394.     }
  1395.     if (s1 = FindToolType(s,"MODE")) {
  1396.         StrToLong(s1,&RenderMode);
  1397.     }
  1398.     if (s1 = FindToolType(s,"SAVEFORMAT")) {
  1399.         if (MatchToolValue(s1,"OPAL24")) {
  1400.             SaveFormat = 1;
  1401.         }
  1402.         else {
  1403.             if (MatchToolValue(s1,"OPAL24T")) {
  1404.                 SaveFormat = 2;
  1405.             }
  1406.             else {
  1407.                 if (MatchToolValue(s1,"OPAL24F")) {
  1408.                     SaveFormat = 3;
  1409.                 }
  1410.                 else {
  1411.                     if (MatchToolValue(s1,"OPAL24FT")) {
  1412.                         SaveFormat = 4;
  1413.                     }
  1414.                     else {
  1415.                         if (MatchToolValue(s1,"JPEG")) {
  1416.                             SaveFormat = 5;
  1417.                         }
  1418.                         else {
  1419.                             if (MatchToolValue(s1,"JPEGT")) {
  1420.                                 SaveFormat = 6;
  1421.                             }
  1422.                             else {
  1423.                                 if (MatchToolValue(s1,"PPM")) {
  1424.                                     SaveFormat = 7;
  1425.                                 }
  1426.                                 else {
  1427.                                     if (MatchToolValue(s1,"BW16")) {
  1428.                                         SaveFormat = 8;
  1429.                                     }
  1430.                                     else {
  1431.                                         if (MatchToolValue(s1,"BW256")) {
  1432.                                             SaveFormat = 9;
  1433.                                         }
  1434.                                         else {
  1435.                                             if (MatchToolValue(s1,"HAM6")) {
  1436.                                                 SaveFormat = 10;
  1437.                                             }
  1438.                                             else {
  1439.                                                 if (MatchToolValue(s1,"HAM8")) {
  1440.                                                     SaveFormat = 11;
  1441.                                                 }
  1442.                                                 else {
  1443.                                                     if (MatchToolValue(s1,"DCTV3")) {
  1444.                                                         SaveFormat = 12;
  1445.                                                     }
  1446.                                                     else {
  1447.                                                         if (MatchToolValue(s1,"DCTV4")) {
  1448.                                                             SaveFormat = 13;
  1449.                                                         }
  1450.                                                         else {
  1451.                                                             SaveFormat = 0;
  1452.                                                         }
  1453.                                                     }
  1454.                                                 }
  1455.                                             }
  1456.                                         }
  1457.                                     }
  1458.                                 }
  1459.                             }
  1460.                         }
  1461.                     }
  1462.                 }
  1463.             }
  1464.         }
  1465.     }
  1466.     if (s1 = FindToolType(s,"QUALITY")) {
  1467.         StrToLong(s1,&Quality);
  1468.     }
  1469.     if (s1 = FindToolType(s,"PUBSCREENR")) {
  1470.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  1471.                             GTST_String,s1,
  1472.                             TAG_END);
  1473.     }
  1474.     if (s1 = FindToolType(s,"ANTIALIAS")) {
  1475.         AntiAlias = MatchToolValue(s1,"YES");
  1476.     }
  1477. }
  1478.